package org.ccay.vfs;

import java.util.Collection;
import java.util.HashMap;
import java.util.Map;

import org.apache.commons.vfs2.FileSystemOptions;
import org.ccay.core.exception.ApplicationException;
import org.ccay.core.ioc.Ccay;
import org.ccay.core.server.IAfterStartupHandler;
import org.ccay.core.server.StartupEventArgs;

public class ModuleFileSystemRegistry implements IAfterStartupHandler{
	
	private final Map<String, ModuleFileSystemConfig> moduleConfig = new HashMap<String, ModuleFileSystemConfig>();
	
	public void registry(ModuleFileSystemConfig config){
		moduleConfig.put(config.getModule(),config);
	}
	
	public Map<String, ModuleFileSystemConfig> getModuleConfig() {
		return moduleConfig;
	}
	

	public String getScheme(String module){
		return moduleConfig.get(module).getArchiveScheme();
	}
	
	public FileSystemOptions getFileSystemOptions(String module){
		return moduleConfig.get(module).getArchFileSystemOptions();
	}
	
	public String getWorkRoot(String module){
		return moduleConfig.get(module).getWorkRoot();
	}
	
	public String getArchiveRoot(String module){
		return moduleConfig.get(module).getArchiveRoot();
	}
	
	public String getTempRoot(String module){
		return moduleConfig.get(module).getTempRoot();
	}
	
	/** 
	 * 收集系统中的各模块配置的FileSystemConfig
	 */
	protected void collectModuleFileSystemConfig(){
		Map<String, ModuleFileSystemConfig> handlerMap =  Ccay.getContext().getBeansOfType(ModuleFileSystemConfig.class);
		Collection<ModuleFileSystemConfig> handlerList = handlerMap.values();
		for(ModuleFileSystemConfig cf : handlerList){
			moduleConfig.put(cf.getModule(), cf);
		}
	}
	
	@Override
	public int getOrder() {
		return 0;
	}

	@Override
	public void execute(Object sender, StartupEventArgs args) throws ApplicationException {
		collectModuleFileSystemConfig();
	}

}
